//查找组成一个偶数最接近的两个素数
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
/*
bool isRightNum(int n)
{
    int flag=true;
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            flag=false;
            break;
        }
    }
    return flag;
}


int main() 
{

    int n;
    cin>>n;
    int sq=n/2;
    for(int i=sq;i<=n;i++)
    {
        if(isRightNum(i)&& isRightNum(n-i))
        {
            cout<<n-i<<"\n"<<i<<endl;
            break;
        }
    }

    return 0;
}
*/

//二进制插入
class BinInsert {
public:
    int binInsert(int n, int m, int j, int i) 
    {
        //m 插n
        m<<=j;
        n=n|m;
        return n;
    }
};



//跳石板
vector<int> Nums(int n)
{
    vector<int>res;
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            res.push_back(i);
            if(i!= n/i)
            {
                res.push_back(n/i);
            }
        }
    }
    return res;
}
int main() 
{
    int N,M;
    cin>>N>>M;
    vector<int>dp(M+1,0x3f3f3f3f);
    dp[N]=0;
    //设计一个函数 返回N的约数
    for(int i=N;i<=M;i++)
    {
        if(dp[i]!=0x3f3f3f3f) 
        {
            vector<int>num=Nums(i);
            for(auto& e:num)
            {
                if(i+e<=M)
                dp[i+e]=min(dp[i+e],dp[i]+1);
            }
        }
    }
    if(dp[M]==0x3f3f3f3f) cout<<-1<<endl;
    else cout<<dp[M]<<endl;
    return 0;
}


//参数解析
// int main()
// {
//     string str;
//     getline(cin, str);
//     vector<string>res;
//     string tmp;
//     bool flag = false;
//     for (int i = 0; i < str.size(); i++)
//     {
//         if (flag && str[i] == '"')
//         {
//             flag = false;
//         }
//         else if (str[i] == '"')
//         {
//             flag = true;
//         }
//         else if (str[i] != ' ')
//         {
//             tmp.push_back(str[i]);
//         }
//         else if (str[i] == ' ' && flag)
//         {
//             tmp.push_back(str[i]);
//         }
//         else
//         {
//             res.push_back(tmp);
//             tmp = "";
//         }
//     }
//     if (!tmp.empty())
//         res.push_back(tmp);
//     cout << res.size() << endl;
//     for (auto& str : res)
//     {
//         cout << str << endl;
//     }

//     return 0;
// }